home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / impacket / dcerpc / dcom.py < prev    next >
Text File  |  2006-05-23  |  6KB  |  175 lines

  1. # Copyright (c) 2003-2006 CORE Security Technologies
  2. #
  3. # This software is provided under under a slightly modified version
  4. # of the Apache Software License. See the accompanying LICENSE file
  5. # for more information.
  6. #
  7. # $Id: dcom.py,v 1.5 2006/05/23 21:19:26 gera Exp $
  8. #
  9.  
  10. import array
  11.  
  12. from impacket import ImpactPacket
  13. import dcerpc
  14. import ndrutils
  15. from struct import *
  16.  
  17. MSRPC_UUID_REMOTE_ACTIVATION ='\xb8\x4a\x9f\x4d\x1c\x7d\xcf\x11\x86\x1e\x00\x20\xaf\x6e\x7c\x57\x00\x00\x00\x00'
  18. MSRPC_UUID_SYSTEM_ACTIVATOR = '\xa0\x01\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00'
  19.  
  20. class ORPCTHIS:
  21.     __SIZE = 32
  22.  
  23.     def __init__(self,data=0):
  24.         self._version_hi = 5
  25.         self._version_low = 6
  26.         self._flags = 1
  27.         self._reserved1 = 0
  28.         self._cid = '\xf1\x59\xeb\x61\xfb\x1e\xd1\x11\xbc\xd9\x00\x60\x97\x92\xd2\x6c'
  29.         self._extensions = '\x60\x5e\x0d\x00'
  30.  
  31.     def set_version(self, mayor, minor):
  32.         self._version_hi = mayor
  33.         self._version_low = minor
  34.  
  35.     def set_cid(self, uuid):
  36.         self._cid = uuid
  37.  
  38.     def rawData(self):
  39.         return pack('<HHLL', self._version_hi, self._version_low, self._flags, self._reserved1) + self._cid + self._extensions
  40.  
  41.  
  42. class UnknownOpnum3RequestHeader(ImpactPacket.Header):
  43.     OP_NUM = 3
  44.  
  45.     __SIZE = 48
  46.  
  47.     def __init__(self, aBuffer = None):
  48.         ImpactPacket.Header.__init__(self, UnknownOpnum3RequestHeader.__SIZE)
  49.  
  50. ##         self.parent().set_callid(19)
  51.         self.set_bytes_from_string('\x05\x00\x06\x01\x00\x00\x00\x00' + '\x31'*32 + '\x00'*8)
  52.  
  53.         if aBuffer: self.load_header(aBuffer)
  54.  
  55.  
  56.     def get_header_size(self):
  57.         return UnknownOpnum3RequestHeader.__SIZE
  58.  
  59.  
  60. class UnknownOpnum4RequestHeader(ImpactPacket.Header):
  61.     OP_NUM = 4
  62.  
  63.     __SIZE = 48
  64.  
  65.     def __init__(self, aBuffer = None):
  66.         ImpactPacket.Header.__init__(self, UnknownOpnum4RequestHeader.__SIZE)
  67.  
  68. ##         self.parent().set_callid(19)
  69. ##         self.set_bytes(self, '\x05\x00\x06\x01\x00\x00\x00\x00' + '\x31'*32 + '\x00'*8)
  70.         self.get_bytes()[:32] = array.array('B', ORPCTHIS().rawData())
  71.         self.set_cls_binuuid('\x01\x00\x00\x00\x00\x00\x00\x00\x70\x5e\x0d\x00\x02\x00\x00\x00')
  72.  
  73.         if aBuffer: self.load_header(aBuffer)
  74.  
  75.     def get_c_binuuid(self):
  76.         return self.get_bytes().tolist()[12:12+16]
  77.     def set_c_binuuid(self, binuuid):
  78.         assert 16 == len(binuuid)
  79.         self.get_bytes()[12:12+16] = array.array('B', binuuid)
  80.  
  81.     def get_cls_binuuid(self):
  82.         return self.get_bytes().tolist()[32:32+16]
  83.     def set_cls_binuuid(self, binuuid):
  84.         assert 16 == len(binuuid)
  85.         self.get_bytes()[32:32+16] = array.array('B', binuuid)
  86.  
  87.  
  88.     def get_header_size(self):
  89.         return UnknownOpnum4RequestHeader.__SIZE
  90.  
  91.  
  92. class RemoteActivationRequestHeader(ImpactPacket.Header):
  93.     OP_NUM = 0
  94.  
  95.     __SIZE = 124
  96.  
  97.     def __init__(self, aBuffer = None):
  98.         ImpactPacket.Header.__init__(self, UnknownOpnum4RequestHeader.__SIZE)
  99.  
  100.         self.get_bytes()[:32] = array.array('B', ORPCTHIS().rawData())
  101.         self.set_cls_binuuid('\xbe\x1d\x8d\x47\xff\xd6\xe1\x4c\xac\x54\xaa\xd5\x4e\xf3\x45\xd3')
  102.         self.set_client_implementation_level(2)
  103.         self.set_interfaces_num(1)
  104.         self.get_bytes()[68:76] = array.array('B', '\x80\x3f\x15\x00\x01\x00\x00\x00')
  105.         self.set_pi_binuuid('\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x46')
  106.         self.get_bytes()[92:124] = array.array('B', '\x01\x00\x00\x00\x01\x00\x00\x00\x07\x00\x64\x00\x04\x00\x69\x00\x01\x00\x00\x00\x87\x03\xb2\xd6\x99\xee\xac\x65\xc7\x53\x81\xa4')
  107.  
  108.         if aBuffer: self.load_header(aBuffer)
  109.  
  110.     def get_c_binuuid(self):
  111.         return self.get_bytes().tolist()[12:12+16]
  112.     def set_c_binuuid(self, binuuid):
  113.         assert 16 == len(binuuid)
  114.         self.get_bytes()[12:12+16] = array.array('B', binuuid)
  115.  
  116.     def get_cls_binuuid(self):
  117.         return self.get_bytes().tolist()[32:32+16]
  118.     def set_cls_binuuid(self, binuuid):
  119.         assert 16 == len(binuuid)
  120.         self.get_bytes()[32:32+16] = array.array('B', binuuid)
  121.  
  122.     def get_object_name_len(self):
  123.         return self.get_word(48, '<')
  124.     def set_object_name_len(self, len):
  125.         self.set_word(48, len, '<')
  126.  
  127.     def get_object_storage(self):
  128.         return self.get_word(52, '<')
  129.     def set_object_storage(self, storage):
  130.         self.set_word(52, storage, '<')
  131.  
  132.     def get_client_implementation_level(self):
  133.         return self.get_long(56, '<')
  134.     def set_client_implementation_level(self, level):
  135.         self.set_long(56, level, '<')
  136.  
  137.     def get_mode(self):
  138.         return self.get_long(60, '<')
  139.     def set_mode(self, mode):
  140.         self.set_long(60, mode, '<')
  141.  
  142.     def get_interfaces_num(self):
  143.         return self.get_long(64, '<')
  144.     def set_interfaces_num(self, num):
  145.         self.set_long(64, num, '<')
  146.  
  147.     def get_pi_binuuid(self):
  148.         return self.get_bytes().tolist()[76:76+16]
  149.     def set_pi_binuuid(self, binuuid):
  150.         assert 16 == len(binuuid)
  151.         self.get_bytes()[76:76+16] = array.array('B', binuuid)
  152.  
  153.  
  154.     def get_header_size(self):
  155.         return UnknownOpnum4RequestHeader.__SIZE
  156.  
  157.  
  158. class DCERPCDcom:
  159.     def __init__(self, dcerpc):
  160.         self._dcerpc = dcerpc
  161.  
  162.     def test(self):
  163.         request = RemoteActivationRequestHeader()
  164.         self._dcerpc.send(request)
  165.         data = self._dcerpc.recv()
  166.         return data
  167.  
  168.     def test2(self):
  169.         request = UnknownOpnum3RequestHeader()
  170.         self._dcerpc.send(request)
  171.  
  172.     def test_lsd(self):
  173.         request = UnknownOpnum4RequestHeader()
  174.         self._dcerpc.send(request)
  175.